Dedecms框架漏洞复现②
漏洞影响范围
DeDeCMS v5.7 SP2 (只影响前台用户)
利用成功前提条件
- 开启会员模块
- 攻击者拥有一个正常的会员账号
- 目标没有设置安全问题
漏洞利用
首先下载安装好dedecms v5.7 sp2
(tips:我用phpstudy搭建的,这里记得网站php版本调低一点,我一开始用的php7会报错,调成php5就正常了)
然后我们点开会员设置,打开会员功能
打开会员功能,注册一个账号,这里一定要记住不要设置安全问题
查看一下我们刚刚注册的用户的id
输入下面这个url,进入修改信息网站,然后抓包localhost/DedeCMS-V5.7-UTF8-SP2/DedeCMS-V5.7-UTF8-SP2/uploads/member/resetpassword.php?dopost=safequestion&safequestion=0.0&safeanswer=&id=2
看到这里有个key=Bp7DfL6
是临时验证码
拿到这个临时key之后就可以修改密码了
所以如果我们知道一个会员用户名,并且这个用户没有设置安全问题,同时我们知道他的id,就可以任意修改他的密码了
漏洞分析
这里修改用户名密码,有两种方式,一种是通过邮箱验证去修改,另外一种是通过安全问题去修改,这里就是利用了安全问题修改用户名密码的漏洞
看到/upload/member/resetpassword.php
页面
用安全问题验证这里,经过两个if判断之后,就进入了sn
函数,这个函数就是我们的修改密码的函数
在没有设置安全问题和答案时,safequestion=0
,safeanswer=null
(为空)
所以0.0==0
为true,''==null
为true,成功绕过,而且从上图可知,此时的send
为N
sn
函数的定义如下
从之前可知,我们的send
为N
,则就不发送邮箱验证码,接下来看到newmail
这个函数
我们来到send
为N
之后的逻辑,可以看到这里返回了我们漏洞复现中修改密码的url,需要我们的id
还有临时验证码key
所以最终为:/member/resetpassword.php(safequestion)-> /member/resetpassword.php(sn)-> /member/inc/inc_pwd_functions.php(newmail)
修复建议
最后的修复,就是把弱等于==
,改为强等于===
1 | // member/resetpassword.php |